home *** CD-ROM | disk | FTP | other *** search
- #include "common.hpp"
- #include "id3dsurf.h"
-
- class CDirect3DSurface8: public IDirect3DSurface8Clone
- {
- public:
- CDirect3DSurface8();
- ~CDirect3DSurface8();
- /* ULONG AddRef();
- HRESULT QueryInterface(REFIID iid, void **ppvObject);
- ULONG Release();*/
-
- // IUnknown methods
- STDMETHOD(QueryInterface) (REFIID riid,
- VOID **ppvObj);
- STDMETHOD_(ULONG,AddRef) ();
- STDMETHOD_(ULONG,Release) ();
-
- // IBuffer methods
- STDMETHOD(SetPrivateData)(REFGUID riid,
- CONST VOID *pvData,
- DWORD cbData,
- DWORD dwFlags);
-
- STDMETHOD(GetPrivateData)(REFGUID riid,
- VOID *pvData,
- DWORD *pcbData);
-
- STDMETHOD(FreePrivateData)(REFGUID riid);
-
- STDMETHOD(GetContainer)(REFIID riid,
- void **ppContainer);
-
- STDMETHOD(GetDevice)(IDirect3DDevice8 **ppDevice);
-
- // IDirect3DSurface8 methods
- STDMETHOD_(D3DSURFACE_DESC, GetDesc)();
-
- STDMETHOD(LockRect)(D3DLOCKED_RECT *pLockedRectData,
- CONST RECT *pRect,
- DWORD dwFlags);
-
- STDMETHOD(UnlockRect)();
-
- BOOL Create(int iWidth, int iHeight);
-
- /* HRESULT GetDevice(IDirect3DDevice8** ppDevice);
- HRESULT SetPrivateData(REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
- HRESULT GetPrivateData(REFGUID refguid, void* pData, DWORD* pSizeOfData);
- HRESULT FreePrivateData(REFGUID refguid);
- HRESULT GetContainer(REFIID riid, void** ppContainer);
-
- D3DSURFACE_DESC GetDesc();
- HRESULT LockRect(D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags);
- HRESULT UnlockRect();*/
-
- private:
- int m_iRefCount;
- BYTE *m_pData;
- D3DSURFACE_DESC m_Desc;
- };
-
- CDirect3DSurface8::CDirect3DSurface8() : m_pData(NULL), m_iRefCount(1)
- {
- }
-
- CDirect3DSurface8::~CDirect3DSurface8()
- {
- delete[] m_pData;
- }
-
- BOOL CDirect3DSurface8::Create(int iWidth, int iHeight)
- {
- m_pData = new BYTE[iWidth * iHeight * 4];
- if (!m_pData) return FALSE;
-
- m_Desc.Format = D3DFMT_A8R8G8B8;
- m_Desc.Type = D3DRTYPE_SURFACE;
- m_Desc.Usage = 0;
- m_Desc.Pool = D3DPOOL_SYSTEMMEM;
- m_Desc.Size = iWidth * iHeight * 4;
- m_Desc.MultiSampleType = D3DMULTISAMPLE_NONE;
- m_Desc.Width = iWidth;
- m_Desc.Height = iHeight;
- return TRUE;
- }
-
- STDMETHODIMP_(ULONG) CDirect3DSurface8::AddRef()
- {
- return ++m_iRefCount;
- }
-
- STDMETHODIMP CDirect3DSurface8::QueryInterface(REFIID iid, void **ppvObject)
- {
- return E_NOINTERFACE;
- }
-
- STDMETHODIMP_(ULONG) CDirect3DSurface8::Release()
- {
- if (!--m_iRefCount)
- {
- delete this;
- return 0;
- }
- return m_iRefCount;
- }
-
- /////////// Dummy implementations ///////////////
-
- STDMETHODIMP CDirect3DSurface8::SetPrivateData(REFGUID riid, CONST VOID *pvData, DWORD cbData, DWORD dwFlags)
- {
- return S_OK;
- }
-
- STDMETHODIMP CDirect3DSurface8::GetPrivateData(REFGUID riid, VOID *pvData, DWORD *pcbData)
- {
- return S_OK;
- }
-
- STDMETHODIMP CDirect3DSurface8::FreePrivateData(REFGUID riid)
- {
- return S_OK;
- }
-
- STDMETHODIMP CDirect3DSurface8::GetContainer(REFIID riid, void **ppContainer)
- {
- return S_OK;
- }
-
- STDMETHODIMP CDirect3DSurface8::GetDevice(IDirect3DDevice8 **ppDevice)
- {
- return S_OK;
- }
-
- // Required implementation
-
- STDMETHODIMP_(D3DSURFACE_DESC) CDirect3DSurface8::GetDesc()
- {
- return m_Desc;
- }
-
- // Assume the entire surface is being locked.
- STDMETHODIMP CDirect3DSurface8::LockRect(D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags)
- {
- pLockedRect->Pitch = m_Desc.Width * 4;
- pLockedRect->pBits = m_pData;
- return S_OK;
- }
-
- STDMETHODIMP CDirect3DSurface8::UnlockRect()
- {
- return S_OK;
- }
-
-
-
- IDirect3DSurface8 *GetCloneSurface(int iWidth, int iHeight)
- {
- CDirect3DSurface8 *pSurf = new CDirect3DSurface8;
-
- if (!pSurf) return NULL;
- if (!pSurf->Create(iWidth, iHeight))
- {
- delete pSurf;
- return NULL;
- }
-
- return (IDirect3DSurface8*)pSurf;
- }
-